// eslint-disable-next-line
import { registerMicroApps, addGlobalUncaughtErrorHandler, runAfterFirstMounted, setDefaultMountApp, start } from 'qiankun';
import apps from "./apps"
function registerApps() {
  registerMicroApps(apps,
    {
      beforeLoad: [
        app => {
          console.log("%c " + '[微应用] before load: ' + app.name, "color:#ffffff;background:#1fc6ac");
        },
      ],
      beforeMount: [
        app => {
          console.log("%c " + '[微应用] before mount: ' + app.name, "color:#ffffff;background:#1fc6ac");
        },
      ],
      afterUnmount: [
        app => {
          console.log("%c " + '[微应用] after unmount: ' + app.name, "color:#ffffff;background:#1fc6ac");
        },
      ],
    });

  // 设置主应用启动后默认进入的微应用。
  // setDefaultMountApp(apps[0].activeRule);
  // 第一个微应用 mount 后需要调用的方法，比如开启一些监控或者埋点脚本。
  runAfterFirstMounted(() => console.log('开启监控'));
  // 添加全局的未捕获异常处理器。
  addGlobalUncaughtErrorHandler((event) => {
    console.log('[全局捕获异常处理器触发]', event);
    const { message } = event;
    if (message && message.includes('died in status LOADING_SOURCE_CODE')) {
      alert('微应用加载失败，请检查应用是否可运行');
    } 
  });


  start(
    {
      // prefetch: true, // 可选，是否开启预加载，默认为 true。
      // sandbox: true, // 可选，是否开启沙箱，默认为 true。//从而确保微应用的样式不会对全局造成影响。
      // 默认情况下沙箱可以确保单实例场景子应用之间的样式隔离，但是无法确保主应用跟子应用、或者多实例场景的子应用样式隔离。
      sandbox: {
        // strictStyleIsolation: true, // 开启严格的样式隔离模式 文档说明不推荐
        experimentalStyleIsolation: true // 实验性的样式隔离特性 qiankun 会改写子应用所添加的样式为所有样式规则增加一个特殊的选择器规则来限定其影响范围
      },
      // singular: true, // 可选，是否为单实例场景，单实例指的是同一时间只会渲染一个微应用。默认为 true。
      // fetch: () => {}, // 可选，自定义的 fetch 方法。
      // getPublicPath: (url) => { console.log(url); },
      // getTemplate: (tpl) => { console.log(tpl); },
      // excludeAssetFilter: (assetUrl) => { console.log(assetUrl); }, // 可选，指定部分特殊的动态加载的微应用资源（css/js) 不被qiankun 劫持处理
    }
  )
}


export default registerApps